/**
 *
 * @description 全排列 回溯
 */

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function (nums) {
  let visited = {},
    permute = [];
  const backTrace = (arr, i) => {
    if (i === nums.length) {
      permute.push([...arr]);
      return;
    }
    for (let j = 0; j < nums.length; j++) {
      // 这里直接进了continue
      /** 重复的 且不是追加的 */
      const isRepetitive = nums[j] === nums[j - 1] && !visited[j - 1];
      // 解决重复的问题
      if (visited[j] || isRepetitive) {
        continue;
      }
      arr.push(nums[j]);
      visited[j] = true;
      backTrace(arr, i + 1);
      arr.pop();
      visited[j] = false;
    }
  };
  nums.sort();
  backTrace([], 0);
  return permute;
};
